import scala.collection.mutable.ArrayBuffer

object TestArrayBuffer {

  def main(args: Array[String]): Unit = {

    /**
     * @ 7.2.2 可变数组
     * 1）定义变长数组
     * val arr01 = ArrayBuffer[Any](3, 2, 5)
     * （1）[Any]存放任意数据类型
     * （2）(3, 2, 5)初始化好的三个元素
     * （3）ArrayBuffer需要引入scala.collection.mutable.ArrayBuffer
     * */

    //（1）创建并初始赋值可变数组
    val arr01 = ArrayBuffer[Any](1, 2, 3)

    //（2）遍历数组
    for (i <- arr01) {
      print(i + " ")
    }
    println(arr01.length) // 3
    println("arr01.hash=" + arr01.hashCode())

    //（3）增加元素
    //（3.1）追加数据
    arr01.+=(4)
    //（3.2）向数组最后追加数据
    arr01.append(5, 6)
    //（3.3）向指定的位置插入数据
    arr01.insert(0, 7, 8)
    println("arr01.hash=" + arr01.hashCode())

    //（4）修改元素
    arr01(1) = 9 //修改第2个元素的值
    println("--------------------------")

    println(arr01.mkString(","))
    //    for (i <- arr01) {
    //      println(i)
    //    }
    println(arr01.length) // 8

    /**
     * @ 7.2.3 不可变数组与可变数组的转换
     * 1）说明
     * arr1.toBuffer  //不可变数组转可变数组
     * arr2.toArray  //可变数组转不可变数组
     * （1）arr2.toArray返回结果才是一个不可变数组，arr2本身没有变化
     * （2）arr1.toBuffer返回结果才是一个可变数组，arr1本身没有变化
     * */

    //（1）创建一个空的可变数组
    val arr2 = ArrayBuffer[Int]()

    //（2）追加值
    arr2.append(1, 2, 3)
    println(arr2) // 1,2,3

    //（3）ArrayBuffer ==> Array
    //（3.1）arr2.toArray 返回的结果是一个新的定长数组集合
    //（3.2）arr2它没有变化
    val newArr = arr2.toArray
    println(newArr.mkString("Array(", ", ", ")"))

    //（4）Array ===> ArrayBuffer
    //（4.1）newArr.toBuffer 返回一个变长数组 newArr2
    //（4.2）newArr 没有任何变化，依然是定长数组
    val newArr2 = newArr.toBuffer
    newArr2.append(123)

    println(newArr2)

    /**
     * @ 7.2.4 多维数组
     * 1）多维数组定义
     * val arr = Array.ofDim[Double](3,4)
     * 说明：二维数组中有三个一维数组，每个一维数组中有四个元素
     * */
    //（1）创建了一个二维数组, 有三个元素，每个元素是，含有4个元素一维 数组()
    val arr = Array.ofDim[Int](3, 4)
    arr(1)(2) = 88
    //（2）遍历二维数组
    for (i <- arr) { //i 就是一维数组
      for (j <- i) {
        print(j + " ")
      }
      println()

      /**
       * 由输出可得：下标同样是从0开始
       * 0 0 0 0
       * 0 0 88 0
       * 0 0 0 0
       * */
    }
  }


}
